import type { DictItem } from '/#/store';
import { useDictStoreWithOut } from '/@/store/modules/dict';

export enum DictCodeEnum {
  DICT_VALUE_TYPE = 'dict_value_type', // 字典数据类型
  COMMON_STATUS = 'common_status', // 通用状态
  SYSTEM_CONFIG = 'system_config', // 系统内置参数
  GENDER = 'system_gender', // 性别
  REQUEST_METHOD = 'system_request_method', // 请求方式
  NOTICE_STATUS = 'system_notice_status', // 通知公告状态
  NOTICE_TYPE = 'system_notice_type', // 通知公告类型
  CLIENT_TYPE = 'system_client_type', // 客户端类型
  CLIENT_SCOPE = 'system_client_scope', // 客户端授权范围
  GRANT_TYPE = 'system_grant_type', // 授权方式
  MICRO_SERVICE = 'system_micro_service', // 微服务列表
  LOGIN_STATUS = 'system_login_status', // 登录状态
  OPERATE_TYPE = 'system_operate_type', // 业务操作类型
  OPERATE_LOG_STATUS = 'system_operate_log_status', // 操作日志状态
}

/**
 * 字典数组转map
 */
export function dictArray2LabelMap(dictArray: DictItem[]) {
  return new Map(dictArray.map((dict) => [dict.value, dict.label]));
}

/**
 * 字典数组转map
 */
export function dictArray2Map(dictArray: DictItem[]) {
  return new Map(dictArray.map((dict) => [dict.value, dict]));
}

/**
 * 获取 dictCode 对应的数据字典数组
 *
 * @param dictCode 数据类型
 * @returns {*|Array} 数据字典数组
 */
export function getDictItems(dictCode) {
  const dictStore = useDictStoreWithOut();
  try {
    return dictStore.getDictItems.get(dictCode) || [];
  } catch (error) {
    console.error(error);
    console.log(dictStore);
    return [];
  }
}

/**
 * 获取 dictCode 对应的数据字典map
 *
 * @param dictCode 数据类型
 * @returns {*|Array} 数据字典数组
 */
export function getDictItemMap(dictCode) {
  return dictArray2Map(getDictItems(dictCode));
}

/**
 * 获取 dictCode 对应的数据字典map
 *
 * @param dictCode 数据类型
 * @returns {*|Array} 数据字典数组
 */
export function getDictItemLabelMap(dictCode) {
  return dictArray2LabelMap(getDictItems(dictCode));
}

/**
 * 获取通用状态数据字典数组
 *
 * @returns {*|Array} 数据字典数组
 */
export const commonStatusDict: Array<DictItem> = (() => {
  const dictItems = getDictItems(DictCodeEnum.COMMON_STATUS);
  if (dictItems) {
    return dictItems;
  }
  return [
    { label: '正常', value: 1, color: 'green' },
    { label: '停用', value: 0, color: 'red' },
  ];
})();

/**
 * 获取通用状态数据字典map
 *
 * @returns {*|Array} 数据字典map
 */
export const commonStatusDictMap: Map<string | number, DictItem> = dictArray2Map(commonStatusDict);
